/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package isd.seguridad.dao;

import isd.general.dao.BaseDAO;
import isd.seguridad.modelo.SG_Menu;
import isd.seguridad.modelo.SG_UsuarioMenu;
import isd.seguridad.modelo.SG_UsuarioMenuPK;
import isd.seguridad.modelo.SG_Usuario;
import java.util.List;
import javax.ejb.Stateless;
import javax.ejb.LocalBean;
import javax.persistence.Query;

/**
 *
 * @author Claudio
 */
@Stateless
@LocalBean
public class SG_MenuDAO extends BaseDAO {

    public void guardar(SG_Menu m) throws Exception {
        if(m.getId()==null){
            crear(m);
        }else{
            editar(m);
        }
    }

    public void borrar(SG_Menu m) throws Exception {

        eliminar(getObjeto(SG_Menu.class, m.getId()));

    }

    public void guardar(SG_UsuarioMenu us) throws Exception  {

        crear(us);
    }

    public SG_Menu getMenu(Integer id){
        return getObjeto(SG_Menu.class, id);
    }

    public List<SG_Menu> getLista() {
        return getLista(SG_Menu.class, true, -1, -1);
    }

    public List<SG_Menu> getLista(int maxResults, int firstResult) {
        return getLista(SG_Menu.class, false, maxResults, firstResult);
    }

    public List<SG_Menu> getListaByNivel(Integer nivel, boolean  activos){
        
        String sQuery = "SELECT m FROM SG_Menu m "
                +" WHERE m.nivel = "+nivel 
                + (activos ? " AND m.activo = 1" : "" )
                +" ORDER BY m.orden";

//        System.err.println(sQuery);
        
        return queryList(SG_Menu.class,sQuery);
    }

    public SG_Menu getMenuByNombre(String value) {
        return getObjeto(SG_Menu.class,"nombre",value);

    }

    public SG_Menu getMenuByUsuario(SG_Menu m, SG_Usuario usuario) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    public List<SG_UsuarioMenu> getMenuByUsuario(SG_Usuario usuario) {

        try {
            String sQuery = "SELECT m FROM SG_UsuarioMenu m "
                    + " WHERE m.idUsuario = :idUsuario ";
            Query q = (Query) em.createQuery(sQuery);

            q.setParameter("idUsuario", usuario.getId());

            return q.getResultList();
        } catch (Exception e) {
            System.out.println("No se puede obtener lista de menu por usuario " + e.getMessage());
            return null;
        }        
    }

    public SG_UsuarioMenu getUsuarioMenu(SG_UsuarioMenu us) {

        SG_UsuarioMenuPK idPK = new SG_UsuarioMenuPK(us.getIdUsuario(), us.getIdMenu());

        return getObjeto(SG_UsuarioMenu.class, idPK);


    }

    public List<SG_Menu> getItemsByMenu(SG_Menu m) {

        try {
            String sQuery = "SELECT m FROM Menu m "
                    + " WHERE m.menuPrincipal.id = :idPpal"
                    + " ORDER BY m.orden ";
            Query q = (Query) em.createQuery(sQuery);
            q.setParameter("idPpal", m.getId());
            return q.getResultList();

        } catch (Exception e) {
            System.out.println("No se puede obtener lista de items por menú " + e.getMessage());
            return null;
        }        
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
 
}
